package com.vehicle.controller;

import com.vehicle.biz.SysRoleBiz;
import com.vehicle.domains.vo.BasePage;
import com.vehicle.domains.vo.Result;
import com.vehicle.domains.vo.req.sysRole.AddRolePermissionsReq;
import com.vehicle.domains.vo.req.sysRole.AddRoleReq;
import com.vehicle.domains.vo.req.sysRole.ListRoleReq;
import com.vehicle.domains.vo.req.sysRole.UpdateRoleReq;
import com.vehicle.domains.vo.res.sysRole.SysRoleRes;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

/**
 * 系统角色管理控制器
 * 对应智慧门禁系统中角色的新增、修改、删除、查询等操作
 */
@RestController
@RequestMapping("/api/role")
@Slf4j
@Tag(name = "SysRoleController", description = "系统角色管理相关接口")
public class SysRoleController {

    @Resource
    private SysRoleBiz sysRoleBiz;

    /**
     * 新增角色接口
     * 需传入角色编码、角色名称、角色状态（默认启用）
     */
    @PostMapping("/add")
    @Operation(description = "新增角色接口")
    public Result<Void> addRole(@RequestBody @Valid AddRoleReq req) {
        sysRoleBiz.addRole(req);
        return Result.success();
    }

    /**
     * 修改角色接口
     * 需传入角色ID，支持修改角色名称、角色状态（编码不可修改）
     */
    @PostMapping("/updateRole")
    @Operation(description = "修改角色接口")
    public Result<Void> updateRole(@RequestBody @Valid UpdateRoleReq req) {
        sysRoleBiz.updateRole(req);
        return Result.success();
    }

    /**
     * 删除角色接口
     * 通过角色ID删除角色（实际业务可改为逻辑删除，更新status为DELETED）
     */
    @PostMapping("/deleteRole")
    @Operation(description = "删除角色接口")
    public Result<Void> deleteRole(
            @Parameter(schema = @Schema(name = "id", description = "角色id"))
            @RequestParam Long id) {
        sysRoleBiz.deleteRole(id);
        return Result.success();
    }

    /**
     * 根据ID查询角色接口
     * 返回角色完整信息（ID、编码、名称、状态、创建/更新时间）
     */
    @PostMapping("/getRoleById")
    @Operation(description = "根据id查询角色接口")
    public Result<SysRoleRes> getRoleById(
            @Parameter(schema = @Schema(name = "id", description = "角色id"))
            @RequestParam Long id) {
        return Result.success(sysRoleBiz.getRoleById(id));
    }

    /**
     * 分页查询角色列表接口
     * 支持按角色编码、角色名称、角色状态、创建时间范围筛选
     */
    @PostMapping("/list")
    @Operation(description = "分页查询角色列表接口")
    public Result<BasePage<SysRoleRes>> list(@RequestBody @Valid ListRoleReq req) {
        return Result.success(sysRoleBiz.selectRoleList(req));
    }

    @PostMapping("/addRolePermissions")
    @Operation(description = "为角色添加权限接口")
    public Result<Void> addRolePermissions(@RequestBody @Valid AddRolePermissionsReq req) {
        sysRoleBiz.addRolePermissions(req);
        return Result.success();
    }
}
